isf 0.1.0

Parsing, Deserialization and Serialization of the Interactive Shader Format.
Documentation
/*{
	"DESCRIPTION": "",
	"CREDIT": "by VIDVOX",
	"ISFVSN": "2",
	"CATEGORIES": [
		"Color Effect"
	],
	"INPUTS": [
		{
			"NAME": "inputImage",
			"TYPE": "image"
		},
		{
			"NAME": "r",
			"TYPE": "bool",
			"DEFAULT": 1.0
		},
		{
			"NAME": "g",
			"TYPE": "bool",
			"DEFAULT": 1.0
		},
		{
			"NAME": "b",
			"TYPE": "bool",
			"DEFAULT": 1.0
		},
		{
			"NAME": "a",
			"TYPE": "bool",
			"DEFAULT": 0.0
		},
		{
			"NAME": "strobeRates",
			"LABEL": "Strobe Rates",
			"TYPE": "color",
			"DEFAULT": [
				0.0,
				0.0,
				0.0,
				0.0
			]
		}
	],
	"PASSES": [
		{
			"TARGET":"lastState",
			"WIDTH": "1",
			"HEIGHT": "1",
			"PERSISTENT": true,
			"DESCRIPTION": "Stores the current strobe state of each of the color channels."
		},
		{
			
		}
	]
	
}*/



void main()
{
	//	if this is the first pass, i'm going to read the position from the "lastPosition" image, and write a new position based on this and the hold variables
	if (PASSINDEX == 0)	{
		vec4		srcPixel = IMG_PIXEL(lastState,vec2(0.5));
		//	i'm only using the X, which is the last render time we reset
		if (strobeRates.r == 0.0)	{
			srcPixel.r = (srcPixel.r == 0.0) ? 1.0 : 0.0;
		}
		else	{
			srcPixel.r = (mod(TIME, strobeRates.r) <= strobeRates.r / 2.0) ? 1.0 : 0.0;
		}
		if (strobeRates.g == 0.0)	{
			srcPixel.g = (srcPixel.g == 0.0) ? 1.0 : 0.0;
		}
		else	{
			srcPixel.g = (mod(TIME, strobeRates.g) <= strobeRates.g / 2.0) ? 1.0 : 0.0;
		}
		if (strobeRates.b == 0.0)	{
			srcPixel.b = (srcPixel.b == 0.0) ? 1.0 : 0.0;
		}
		else	{
			srcPixel.b = (mod(TIME, strobeRates.b) <= strobeRates.b / 2.0) ? 1.0 : 0.0;
		}
		if (strobeRates.a == 0.0)	{
			srcPixel.a = (srcPixel.a == 0.0) ? 1.0 : 0.0;
		}
		else	{
			srcPixel.a = (mod(TIME, strobeRates.a) <= strobeRates.a / 2.0) ? 1.0 : 0.0;
		}
		gl_FragColor = srcPixel;
	}
	//	else this isn't the first pass- read the position value from the buffer which stores it
	else	{
		vec4 lastStateVector = IMG_PIXEL(lastState,vec2(0.5));
		vec4 srcPixel = IMG_THIS_PIXEL(inputImage);
		float red = (r == true) ? 1.0 : 0.0;
		float green = (g == true) ? 1.0 : 0.0;
		float blue = (b == true) ? 1.0 : 0.0;
		float alpha = (a == true) ? 1.0 : 0.0;
		srcPixel.r = (lastStateVector.r == 0.0) ? srcPixel.r : abs(red-srcPixel.r);
		srcPixel.g = (lastStateVector.g == 0.0) ? srcPixel.g : abs(green-srcPixel.g);
		srcPixel.b = (lastStateVector.b == 0.0) ? srcPixel.b : abs(blue-srcPixel.b);
		srcPixel.a = (lastStateVector.a == 0.0) ? srcPixel.a : abs(alpha-srcPixel.a);
		gl_FragColor = srcPixel;
	}
}